#include "ModRunChain.h"
#include <QDebug>

#include "../Output/FactoryOutput.h"

#include "Gof23/Gof_Adapter/MoveOld.h"
#include "Gof23/Gof_Adapter/MoveAdapter.h"

//责任链模式的ModRun（Chain）;
ModRunChain::ModRunChain()
{
    //模式名称;
    m_strModelName = "责任链模式（Chain）;";
    //模式描述;
    m_strModelDesc = "职责链模式：使多个对象都有机会处理请求，从而避免请求的发送者和接收者之前的耦合关系，\n"
                     "将这些对象连成一条链，并沿着这条链传递请求，直到有一个对象处理它为止。\n\n"

                     "职责链上的处理者负责处理请求，客户只需要将请求发送到职责链上即可，\n"
                     "无需关心请求的处理细节和请求的传递，所有职责链将请求的发送者和请求的处理者解耦了。\n"
                     "\n"
                     ;
}

//初始化显示模式;
void ModRunChain::InitDisplay()
{
    qDebug() << m_strModelName;
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateDescOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outList{ m_strModelName,m_strModelDesc};
        pOutPut->OutPut(outList);
    }
}

//返回模式类型;
EnumModRun ModRunChain::GetEnum()
{
    return emModRunChain;
}

//运行模式;
void ModRunChain::ModRun()
{
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateRunOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outListStart{ "========责任链模式（Chain） start:=======" };
        std::initializer_list<QString> outListEnd{ "========责任链模式（Chain） end:=======" };
        pOutPut->OutPut(outListStart);

        //责任链模式（Chain）;
        
        
        pOutPut->OutPut(outListEnd);
    }

}

InterFaceModRun* ModRunChain::CreateMe()
{
    return new ModRunChain();
}
